//
// Created by zuo on 2024/7/8.
// 题目链接 https://www.lanqiao.cn/problems/1331/learning/?page=1&first_category_id=1&problem_id=1331
// 题目链接 https://www.lanqiao.cn/problems/3691/learning/?page=1&first_category_id=1&problem_id=3691
// 题目链接 https://www.lanqiao.cn/problems/3400/learning/?page=1&first_category_id=1&problem_id=3400
//

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 1e6 + 9;
int a[N], prefix[35][N], prexor[N], cnt[N];

int main()
{
    // // 1331 与运算 &  只会更小
    // unsigned int x;
    // cin >> x;
    // int ans = 0;
    // while (x)
    // {
    //     if(x & 1) ans++;
    //     x >>= 1; // 右移相当于除2
    // }
    // cout << ans;

    // // 3691  或运算 |  只会更大
    // int n, q;
    // cin >> n >> q;
    // for (int i = 1; i <= n; i++)
    // {
    //     cin >> a[i];
    // }
    // // w 表示每一个数字二进制的 第多少位
    // for (int w = 0; w < 31; w++)
    // {
    //     for (int i = 1; i <= n; i++)
    //     {
    //         // a[i] >> w & 1  判断第 w 位 是否为1
    //         prefix[w][i] = prefix[w][i - 1] + (a[i] >> w & 1);
    //     }
    // }
    // while (q--)
    // {
    //     int l, r;
    //     cin >> l >> r;
    //     int ans = 0;
    //     for (int w = 0; w < 31; w++)
    //     {
    //         // ans = 2^0 * 1 + 2^1 * 1 ...
    //         ans += (1 << w) * (prefix[w][r] - prefix[w][l - 1] ? 1 : 0);
    //     }
    //     cout << ans << endl;
    // }

    // 3400 异或 ^ 可大可小
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        cin >> a[i];
    }
    for (int i = 1; i <= n; i++)
    {
        prexor[i] = prexor[i - 1] ^ a[i]; // 异或前缀和
    }
    cnt[0] = 1;
    int ans = n * (n + 1) / 2;
    for (int i = 1; i <= n; i++)
    {
        for (int j = 0; j <= 200; j++)
        {
            int sq = j * j;
            ans -= cnt[prexor[i] ^ sq];
        }
        cnt[prexor[i]]++;
    }
    cout << ans << '\n';
    return 0;
}
